<?php

class AdminController extends Zend_Controller_Action
{
    
    
    /**
     * @var Application_Model_Eventos 
     */
    protected $_eventos = null;
    
    /**
     * @var Application_Model_Fotos 
     */
    protected $_fotos = null;
    
    /**
     * @var Application_Model_EventoCategory 
     */
    protected $_eventoCategory = null;

    public function init()
    {
        // Breadcrumbs configuration
        $uri = $this->_request->getPathInfo();
        $activeNav = $this->view->navigation()->findByUri($uri);
        if ($activeNav) { // Controllo per evitare "Strict standards: Creating default object from empty value"
            $activeNav->active = true;
        }
        
        // Eventos model initialisation
        $this->_eventos = new Application_Model_Eventos();
        $this->_fotos = new Application_Model_Fotos();
        $this->_eventoCategory = new Application_Model_EventoCategory();
    }

    public function createEventoAction()
    {
        $eventoForm = new Application_Form_Evento;
        
        if ($this->_request->isPost()) {
            if ($eventoForm->isValid($_POST)) {                
                $evento = $this->_eventos->createEvento(
                        $eventoForm->getValue('evTitolo'), 
                        $eventoForm->getValue('evDataInizio'), 
                        $eventoForm->getValue('evDataFine'), 
                        $eventoForm->getValue('evDataTermine'), 
                        $eventoForm->getValue('evIntro'), 
                        $eventoForm->getValue('evCorpo'), 
                        $eventoForm->getValue('guida_guidaId'), 
                        $eventoForm->getValue('difficolta_diffId'),
                        $eventoForm->getValue('evDataRimandato'), 
                        $eventoForm->getValue('evLogistica'), 
                        $eventoForm->getValue('evAbbigliamento'), 
                        $eventoForm->getValue('evCosto'), 
                        $eventoForm->getValue('evInfo'), 
                        $eventoForm->getValue('evVideo'));
                
                $evCatModel = new Application_Model_EventoCategory();
                $evCatModel->createEventoCategory($evento->evId, $eventoForm->getValue('category_catId'));
                
                //*** Gestione foto ***
                if (!$eventoForm->fotoEvento->receive()) {
                    throw new Zend_Exception("Problema nell'invio della foto");
                }
                $values = $eventoForm->getValues();
                $fotosName = $values['fotoEvento'];
                
                if (is_array($fotosName)) { //Controllo che ci sia più di una foto per evitare che errori sul foreach
                    $i = 0;
                    foreach ($fotosName as $fotoName) {
                        if ($i == 0) {
                            $this->_fotos->createFoto("si", $fotoName, $fotoName, $evento->evId);
                            $i++;
                        } else {
                            $this->_fotos->createFoto("no", $fotoName, $fotoName, $evento->evId);
                            $i++;
                        }

                    }
                } else {
                    $this->_fotos->createFoto("si", $fotosName, $fotosName, $evento->evId);
                }
                //*** Fine gestione foto ***
                
                // FlashMessage
                $this->_helper->flashMessenger->addMessage('Evento Creato con successo!');
                $this->_redirect('/');
                //return $this->_forward('confirm-evento');
            } 
        }
        
        $eventoForm->setAction('create-evento');
        $this->view->form = $eventoForm;
    }
    
    public function confirmEventoAction()
    {
        // Redirect verso la home dopo 2 secondi
        $this->getResponse()->setHeader('Refresh', '2; URL=/');
    }
    
    public function deleteEventoAction()
    {
        $identEvento = $this->_getParam('ident');
        $this->_eventos->deleteEvento($identEvento);
        
        // FlashMessage
        $this->_helper->flashMessenger->addMessage('Evento Cancellato con successo!');
        $this->_redirect('/');
    }
    
    public function updateEventoAction()
    {
        $eventoForm = new Application_Form_Evento;
        
        $ident = $this->_getParam('ident');
        $currentEvento = $this->_eventos->getEventoByIdent($ident);
        $eventoForm->setAction('/admin/update-evento/ident/' . $currentEvento->evIdent);
        
        if ($this->_request->isPost()) {
            if ($eventoForm->isValid($_POST)) {                
                $evento = $this->_eventos->updateEvento(
                        $currentEvento->evId,
                        $eventoForm->getValue('evTitolo'), 
                        $eventoForm->getValue('evDataInizio'), 
                        $eventoForm->getValue('evDataFine'), 
                        $eventoForm->getValue('evDataTermine'), 
                        $eventoForm->getValue('evIntro'), 
                        $eventoForm->getValue('evCorpo'), 
                        $eventoForm->getValue('guida_guidaId'), 
                        $eventoForm->getValue('difficolta_diffId'),
                        $eventoForm->getValue('evDataRimandato'), 
                        $eventoForm->getValue('evLogistica'), 
                        $eventoForm->getValue('evAbbigliamento'), 
                        $eventoForm->getValue('evCosto'), 
                        $eventoForm->getValue('evInfo'), 
                        $eventoForm->getValue('evVideo'));
                
                $evCatModel = new Application_Model_EventoCategory();
                $evCatModel->updateEventoCategory($evento->evId, $eventoForm->getValue('category_catId'));
                
                //*** Gestione foto ***
                // Logica di funzionamento:
                // SE non imposto foto => lascio tutto com'è.
                // SE imposto foto => cancello foto vecchie e sostitisco con nuove
                if (!$eventoForm->fotoEvento->receive()) {
                    throw new Zend_Exception("Problema nell'invio della foto");
                }
                $values = $eventoForm->getValues();
                $fotosName = $values['fotoEvento'];
                
                if (is_array($fotosName)) { //Controllo che ci sia più di una foto per evitare che errori sul foreach
                    $this->_fotos->deleteFotosByEvento($evento);
                    $i = 0;
                    foreach ($fotosName as $fotoName) {
                        if ($i == 0) {
                            $this->_fotos->createFoto("si", $fotoName, $fotoName, $evento->evId);
                            $i++;
                        } else {
                            $this->_fotos->createFoto("no", $fotoName, $fotoName, $evento->evId);
                            $i++;
                        }

                    }
                } elseif ($fotosName) { // Uplodiamo solo se le foto vengono inserite nel form
                    $this->_fotos->deleteFotosByEvento($evento);
                    $this->_fotos->createFoto("si", $fotosName, $fotosName, $evento->evId);
                }
                //*** Fine gestione foto ***
                
                // FlashMessage
                $this->_helper->flashMessenger->addMessage('Evento modificato con successo!');
                $this->_redirect('/evento/' . $evento->evIdent);
            }
            
        } else {
            $ident = $this->_getParam('ident');
            $currentEvento = $this->_eventos->getEventoByIdent($ident);
            $currentEventoArray = $currentEvento->toArray();
            $currentEventoArray['evDataRimandato'] = "";
            
            $eventoForm->populate($currentEventoArray);
        }
        
        $this->view->form = $eventoForm;
    }
    
    public function deleteCategoryEventoAction()
    {
        $evId = $this->_getParam('evId');
        $catId = $this->_getParam('catId');
        $this->_eventoCategory->deleteEventoCategory($evId, $catId);
        
        // Redirect to the show evento
        $ev = $this->_eventos->getEventoById($evId);
        $identEvento = $ev->evIdent;
        
        // FlashMessage
        $this->_helper->flashMessenger->addMessage('Categoria Cancellata con successo!');
        $this->_redirect('/evento/' . $identEvento);
    }

}

